home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_02_04
/
2n04053a
< prev
next >
Wrap
Text File
|
1991-02-23
|
2KB
|
76 lines
/*
* PROGRAM : BRAND.C
* AUTHOR : Mark R. Nelson
* DATE : January 13, 1990
* DESCRIPTION : This program "brands" the unused bytes
* of CMOS RAM with the string specified on the
* command line. The string is padded out to the
* correct length, 12 bytes.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <conio.h>
#ifdef M_I86 /* Microsoft C functions */
#define enable _enable
#define disable _disable
#define inportb( a ) inp( a )
#define outportb( a, b ) outp( a, b )
#endif
unsigned char read_cmos( int location );
void write_cmos( int location, unsigned char value );
void error_exit( void );
int main( int argc, char *argv[] )
{
int i;
char buffer[ 25 ];
if ( argc < 2 )
error_exit();
if ( strlen( argv[ 1 ] ) > 12 )
error_exit();
printf( "Branding string: %s\n", argv[ 1 ] );
strcpy( buffer, argv[ 1 ] );
strcat( buffer, " " );
for ( i = 0 ; i < 12 ; i++ )
write_cmos( 0x34 + i, buffer[ i ] );
return( 0 );
}
unsigned char read_cmos( int location )
{
outportb( 0x70, location );
return( (unsigned char) inportb( 0x71 ) );
}
void write_cmos( int loc, unsigned char value )
{
int checksum;
outportb( 0x70, loc );
outportb( 0x71, value );
if ( loc > 0xf && loc < 0x2e ) {
checksum = 0;
for ( loc = 0x10 ; loc <= 0x2d ; loc++ )
checksum += read_cmos( loc );
write_cmos( 0x2e, (char) ( checksum >> 8 ) );
write_cmos( 0x2f, (char) ( checksum & 255 ) );
}
}
void error_exit()
{
puts( "\nUsage: BRAND string" );
puts( "\n\"string\" must be less than 12 bytes. " );
puts( "The string parameter will be padded out, " );
puts( "and written into locations 0x34 through 0x3f " );
puts( "of CMOS RAM." );
}